#ifndef CHASSIS_H
#define CHASSIS_H

#include "base_include.h"

#define LEFT_FRONT_WHEEL_1_PORT vex::PORT1 
#define LEFT_FRONT_WHEEL_2_PORT vex::PORT2
#define LEFT_REAR_WHEEL_1_PORT vex::PORT3
#define LEFT_REAR_WHEEL_2_PORT vex::PORT4
#define RIGHT_FRONT_WHEEL_1_PORT vex::PORT5
#define RIGHT_FRONT_WHEEL_2_PORT vex::PORT6
#define RIGHT_REAR_WHEEL_1_PORT vex::PORT7
#define RIGHT_REAR_WHEEL_2_PORT vex::PORT8

//底盘类
class Chassis {
  public:
  //构造函数
  Chassis(){
    
  }
  //析构函数
  ~Chassis(){

  }

  private:
  //左前轮电机
  vex::motor leftFront1 = vex::motor(LEFT_FRONT_WHEEL_1_PORT, vex::gearSetting::ratio18_1,false);
  vex::motor leftFront2 = vex::motor(LEFT_FRONT_WHEEL_2_PORT, vex::gearSetting::ratio18_1,false);
  //左后轮电机
  vex::motor leftRear1 = vex::motor(LEFT_REAR_WHEEL_1_PORT, vex::gearSetting::ratio18_1,false);
  vex::motor leftRear2 = vex::motor(LEFT_REAR_WHEEL_2_PORT, vex::gearSetting::ratio18_1,false);
  //右前轮电机
  vex::motor rightFront1 = vex::motor(RIGHT_FRONT_WHEEL_1_PORT, vex::gearSetting::ratio18_1,false);
  vex::motor rightFront2 = vex::motor(RIGHT_FRONT_WHEEL_2_PORT, vex::gearSetting::ratio18_1,false);
  //右前轮电机
  vex::motor rightRear1 = vex::motor(RIGHT_REAR_WHEEL_1_PORT, vex::gearSetting::ratio18_1,false);
  vex::motor rightRear2 = vex::motor(RIGHT_REAR_WHEEL_2_PORT, vex::gearSetting::ratio18_1,false);

  private:
  //运动分量
  double xMove;
  double yMove;

  public:
  //以指定转速前进
  void goForward(double v);
  //以指定转速 前进指定距离
  void goForward(double v, double distance);

  //以指定转速后退
  void goBack(double v);
  //以指定转速 后退指定距离
  void goBack(double v, double distance);

  //以指定转速原地左转
  void turnLeft(double v);
  //以指定转速 原地左转指定角度
  void turnLeft(double v, double degree);

  //以指定转速原地右转
  void turnRight(double v);
  //以指定转速 原地右转指定角度
  void turnRight(double v, double degree);

  //以指定转速左平移
  void translateLeft(double v);
  //以指定转速 左平移指定距离
  void translateLeft(double v, double distance);

  //以指定转速右平移
  void translateRight(double v);
  //以指定转速 右平移指定距离
  void translateRight(double v, double distance);

  //根据运动分量转向移动

  //根据运动分量平移移动

  //停止
  void stopMoving();

};

#endif